package com.kexio.file.service;

import java.io.InputStream;

import com.kexio.file.domain.FileInfo;
import com.kexio.file.dto.PreviewResult;

/**
 * 文件预览服务接口
 * 
 * @author kexio
 */
public interface FilePreviewService {

    /**
     * 检查文件是否支持预览
     *
     * @param fileInfo 文件信息
     * @return 是否支持预览
     */
    boolean isPreviewable(FileInfo fileInfo);

    /**
     * 生成预览内容
     *
     * @param fileInfo 文件信息
     * @param fileStream 文件流
     * @return 预览结果
     */
    PreviewResult generatePreview(FileInfo fileInfo, InputStream fileStream);

    /**
     * 获取预览URL
     *
     * @param fileId 文件ID
     * @param userId 用户ID（用于权限检查）
     * @return 预览URL
     */
    String getPreviewUrl(Long fileId, Long userId);

    /**
     * 生成文档缩略图
     *
     * @param fileInfo 文件信息
     * @param fileStream 文件流
     * @param width 缩略图宽度
     * @param height 缩略图高度
     * @return 缩略图数据
     */
    byte[] generateThumbnail(FileInfo fileInfo, InputStream fileStream, int width, int height);

    /**
     * 获取文档页数（仅支持PDF等多页文档）
     *
     * @param fileInfo 文件信息
     * @param fileStream 文件流
     * @return 页数，不支持则返回1
     */
    int getDocumentPageCount(FileInfo fileInfo, InputStream fileStream);

    /**
     * 生成指定页面的预览图（仅支持PDF等多页文档）
     *
     * @param fileInfo 文件信息
     * @param fileStream 文件流
     * @param pageNumber 页码（从1开始）
     * @return 页面预览图数据
     */
    byte[] generatePagePreview(FileInfo fileInfo, InputStream fileStream, int pageNumber);
}
